package com.itheima.edu.info.manager.dao;

import com.itheima.edu.info.manager.domain.Student;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;

/*
    库管类
        优化方案: 使用集合容器替换数组容器
 */
public class OtherStudentDao4 implements BaseStudentDao {

    //1. 创建一个集合,用来充当数据仓库
    private static ArrayList<Student> stuArray = new ArrayList<Student>();

    //通过静态代码块的设计让系统在加载StudentDao.class的时候自动执行静态代码块代码，初始化两个学生对象到数组容器中
    static {
        //创建字符输入流
        try {
            BufferedReader br = new BufferedReader(new FileReader("studentServer\\stu3.txt"));
            String line;
            while ((line=br.readLine())!=null) {
               // br.readLine();
                String[] s = line.split(",");
                Student stu = new Student(s[0],s[1],s[2],s[3]);
                stuArray.add(stu);
            }
            br.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    //添加学生
    public boolean addStudent(Student stu) {
        boolean add = stuArray.add(stu);
        reSave();
        return add;
    }

    //查询所有学生对象并返回
    public Student[] findAllStudent() {
        //1. 定义一个数组,用来返回集合中的数据
        return stuArray.toArray(new Student[stuArray.size()]);
    }

    //删除学生
    public void deleteStudent(String delId) {
        //1. 找到delId在数组容器中对应的索引位置
        int index = getIndex(delId);
        //2. 用null将该索引位置的学生对象覆盖掉,从而实现删除效果
        stuArray.remove(index);
        reSave();
    }

    //修改学生
    public void updateStudent(String updateId, Student stu) {
        //1. 找到delId在数组容器中对应的索引位置
        int index = getIndex(updateId);
        //2. 用null将该索引位置的学生对象覆盖掉,从而实现删除效果
        stuArray.set(index, stu);
        reSave();
    }

    //获取指定学号在数组中的索引位置
    public int getIndex(String updateId) {
        // 1.1 先假设delId在数组中不存在
        int index = -1;

        //1.2 遍历数组容器
        for (int i = 0; i < stuArray.size(); i++) {
            //1.3 获取当前索引位置的元素
            Student stu = stuArray.get(i);
            //1.4 将stu的id和delId进行匹配
            if (stu != null && stu.getSid().equals(updateId)) {
                index = i;
                break;
            }
        }
        return index;
    }

    private void reSave() {
        try {
            BufferedWriter bw = new BufferedWriter(new FileWriter("studentServer\\stu3.txt"));
            for (int i = 0; i < stuArray.size(); i++) {
                Student student = stuArray.get(i);
                bw.write(student.toString() );
                bw.write(System.lineSeparator());
                bw.flush();
            }
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}